iT邦幫忙

2022 iThome 鐵人賽

DAY 7
2
Software Development

IT邦鐵人賽文章搜尋引擎系列 第 7

[Day 07] 如何設計爬蟲流程 - 關於轉生爬蟲後的那檔子事 |【搜尋引擎製作錄】

  • 分享至 

  • xImage
  •  

Github, Over Engineering

為了提供我 Data Science 需要的資料,來準備爬蟲程式吧!
不想特別去寫 Python,所以就用 Javascript 吧!

Kirby: 我們發現在過去鐵人賽的文章中,
很少人 嘗試 Python 以外的選項!?

這個小系列分作三個部分

architecture

相關名詞

這邊先進行名詞解釋,方便後面同步。

  • Scraping
    專門指擷取網頁資料,人工的 Copy Paste 也算在此類。
    把資料擷取下來之後,經過分析或儲存後,使資料在接下來被近一步使用。

  • Crawler (網路爬蟲)
    搜尋引擎為了搜集資料、建立索引,
    有撰寫機器人,自動化搜集網路上資料的需求。
    許多大型的搜尋引擎像是 Google, Bing, Yahoo 等,
    皆有各自的機器人,並會爬過每一個頁面跟每一個連結,比較非目的性。
    有時也被稱為 spider

  • Scheduler
    預先設置好在某個時間點執行某項任務的腳本。
    也可以稱作 排程

程式邏輯

我們的目的只需要鐵人賽文章,
因為有明確的目標加上幾乎固定的資料集,
這邊就不用特別沿著連結慢慢爬,
直接對確定的目標進行資料擷取,
然後每週固定跑一次即可。

再來設計程式流程,
整個資料搜集分做兩大塊,crawler jobextracting

實作的 crawler codegithub action script 都在 github repo 中。
為了不佔篇幅,這邊直接給最後的思路 (pseudo code),
同時,可以同時參照下方 wikipedia 上的 crawler 架構圖。

architecture

Crawler Job

  • 根據總頁數,拆做好幾份,生成對應數量的 Crawler 並行處理。
  • 透過 Scheduler 觸發 Crawler

Extraction

  • 根據指定的頁數範圍,擷取該頁的文章列表。
  • 根據文章列表的文章連結,接取該連結的文章資訊。
  • 將擷取出的文章資訊存入資料庫。

另外,我的目標是 盡可能減少不必要的程式碼
所以 crawler job 會透過 GitHub Action 處理。

待優化方向

  • 應該另外寫一隻用於擷取總頁數以及拆分頁數的程式,而不是寫死頁數。
  • 完整的架構應該還需要 url 的紀錄,以便避免重複擷取。

Reference


上一篇
[Day 06] 實作技術架構 - 在 IT 邦尋求答案是否少了些什麼 |【搜尋引擎製作錄】
下一篇
[Day 08] 如何用 Deno 爬蟲 - 關於轉生爬蟲後的那檔子事 |【搜尋引擎製作錄】
系列文
IT邦鐵人賽文章搜尋引擎30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言